// 数据库同步脚本
// 用于初始化数据库表结构

const sequelize = require('./config/database');

// 导入所有模型
const User = require('./models/User');
const Association = require('./models/Association');
const AssociationMember = require('./models/AssociationMember');
const Tip = require('./models/Tip');
const Message = require('./models/Message');
const EmergencyPhone = require('./models/EmergencyPhone');

// 同步数据库表结构
async function syncDatabase() {
  try {
    console.log('开始同步数据库表结构...');
    
    // 强制同步（会删除已存在的表并重新创建）
    // 生产环境中应使用 alter: true 或先备份数据
    await sequelize.sync({ force: true });
    
    console.log('数据库表结构同步成功！');
    
    // 插入一些初始数据
    await insertInitialData();
    
  } catch (error) {
    console.error('数据库同步失败:', error);
  } finally {
    // 关闭数据库连接
    await sequelize.close();
  }
}

// 插入初始数据
async function insertInitialData() {
  try {
    console.log('开始插入初始数据...');
    
    // 创建一个测试用户
    const testUser = await User.create({
      openid: 'test_openid',
      nickName: '测试用户',
      avatarUrl: 'https://example.com/avatar.jpg',
      gender: 1,
      isMember: true
    });
    
    // 创建一个测试社团
    const testAssociation = await Association.create({
      name: '测试社团',
      description: '这是一个测试社团，欢迎加入！',
      category: '文化交流',
      presidentId: testUser.id,
      contactPhone: '13800138000',
      contactEmail: 'test@example.com',
      memberCount: 1,
      establishDate: new Date()
    });
    
    // 创建社团成员关系
    await AssociationMember.create({
      userId: testUser.id,
      associationId: testAssociation.id,
      role: 'president'
    });
    
    // 创建测试贴士
    await Tip.create({
      title: '留学行前准备指南',
      content: '<p>出国留学前需要准备以下物品：</p><ul><li>护照和签证</li><li>机票和行程单</li><li>国际信用卡</li><li>适量现金</li><li>转换插头</li></ul>',
      type: '行前准备',
      authorId: testUser.id
    });
    
    // 创建应急电话
    await EmergencyPhone.bulkCreate([
      {
        name: '报警电话',
        phoneNumber: '110',
        category: '常用应急',
        isCommon: true,
        order: 1
      },
      {
        name: '急救中心',
        phoneNumber: '120',
        category: '常用应急',
        isCommon: true,
        order: 2
      },
      {
        name: '消防电话',
        phoneNumber: '119',
        category: '常用应急',
        isCommon: true,
        order: 3
      }
    ]);
    
    console.log('初始数据插入成功！');
    
  } catch (error) {
    console.error('插入初始数据失败:', error);
  }
}

// 执行同步
if (require.main === module) {
  syncDatabase();
}

module.exports = { syncDatabase };